interface MenuItem {
  id?: number;
  parentId?: null | number;
  [key: string]: any;
  children?: MenuItem[];
}

/**
 * 将扁平菜单数据转换为树形结构
 * @param items 扁平菜单数组
 * @param parentId 父节点ID，默认为null(根节点)
 * @returns 树形结构菜单数组
 */
export const buildMenuTree = (
  items: MenuItem[],
  parentId: null | number = null,
): MenuItem[] => {
  // 1. 过滤出当前层级的菜单项
  const result = items.filter((item) => {
    // 处理特殊根节点情况(如parentId === 1000000)
    if (parentId === null) {
      return item.parentId === 1_000_000 || item.parentId === null;
    }
    return item.parentId === parentId;
  });

  // 2. 递归构建子树
  result.forEach((item) => {
    const children = buildMenuTree(items, item.id);
    if (children.length > 0) {
      item.children = children;

      // 可选：对子菜单排序
      item.children.sort((a, b) => a.sort - b.sort);
    }
  });

  // 3. 对当前层级排序
  result.sort((a, b) => a.sort - b.sort);

  return result;
};
